﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;

namespace GRUPO_4.Persistencia
{
    public class EmpresaDao : IEmpresaDAO
    {

        private SqlConnection conexion;

        public EmpresaDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }

        public Empresa CrearEmpresa(Empresa empresa)
        {

            String sentencia = "INSERT INTO Empresa VALUES (@codEmpresa,@Ruc,@RazonSocial,@telefono,@email,@clave,@RubroEmpresa)";
            conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter codEmpresa = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                codEmpresa.Value = empresa.CodEmpresa;
                comando.Parameters.Add(codEmpresa);

                SqlParameter Ruc = new SqlParameter("@Ruc", System.Data.SqlDbType.NVarChar);
                Ruc.Value = empresa.Ruc;
                comando.Parameters.Add(Ruc);

                SqlParameter RazonSocial = new SqlParameter("@RazonSocial", System.Data.SqlDbType.NVarChar);
                RazonSocial.Value = empresa.RazonSocial;
                comando.Parameters.Add(RazonSocial);

                SqlParameter telefono = new SqlParameter("@telefono", System.Data.SqlDbType.NVarChar);
                telefono.Value = empresa.telefono;
                comando.Parameters.Add(telefono);

                SqlParameter email = new SqlParameter("@email", System.Data.SqlDbType.NVarChar);
                email.Value = empresa.email;
                comando.Parameters.Add(email);

                SqlParameter clave = new SqlParameter("@clave", System.Data.SqlDbType.NVarChar);
                clave.Value = empresa.clave;
                comando.Parameters.Add(clave);

                SqlParameter RubroEmpresa = new SqlParameter("@RubroEmpresa", System.Data.SqlDbType.NVarChar);
                RubroEmpresa.Value = empresa.RubroEmpresa;
                comando.Parameters.Add(RubroEmpresa);

                comando.ExecuteNonQuery();
            }


            conexion.Close();
            return this.ObtenerEmpresa(empresa.CodEmpresa);

        }




        public Empresa ModificarEmpresa(Empresa empresa)
        {
            conexion.Open();
            String sqlvalores1 = "Ruc=" + empresa.Ruc +
                                 ", RazonSocial='" + empresa.RazonSocial + "'" +
                                 ", telefono='" + empresa.telefono + "'" +
                                 ", email='" + empresa.email + "'" +
                                 ", clave='" + empresa.clave + "'" +
                                 ", RubroEmpresa='" + empresa.RubroEmpresa + "'";

            String sentencia = "UPDATE Empresa SET " + sqlvalores1 + " WHERE codEmpresa=" + empresa.CodEmpresa;
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerEmpresa(empresa.CodEmpresa);
        }

        public Empresa ObtenerEmpresa(int codigo)
        {


            String sentencia = "SELECT * FROM Empresa WHERE codEmpresa=@codEmpresa";
            conexion.Open();
            Empresa empresa = null;

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter buscador = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                buscador.Value = codigo;
                comando.Parameters.Add(buscador);
                SqlDataReader resultado = comando.ExecuteReader();

                if (resultado.HasRows)
                {
                    resultado.Read();
                    empresa = new Empresa();
                    empresa.CodEmpresa = (int)resultado["codEmpresa"];
                    empresa.Ruc = (String)resultado["Ruc"];
                    empresa.RazonSocial = (String)resultado["RazonSocial"];
                    empresa.telefono = (String)resultado["telefono"];
                    empresa.email = (String)resultado["email"];
                    empresa.clave = (String)resultado["clave"];
                    empresa.RubroEmpresa = (String)resultado["RubroEmpresa"];
                }

            }
            conexion.Close();
            return empresa;
        }


        public void eliminarEmpresa(int codigo)
        {
            String sentencia = "DELETE FROM Empresa where codEmpresa=@codEmpresa";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter borrador = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                borrador.Value = codigo;
                comando.Parameters.Add(borrador);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }

        public ICollection<Empresa> ListarTodos()
        {
            conexion.Open();

            String sentencia = "SELECT * FROM Empresa";

            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de Empresas --- Coleccion es un contenedor de objetos de tipo Empresa

            ICollection<Empresa> objColeccionEmpresas = new List<Empresa>();

            while (resultado.Read())
            {

                Empresa unaEmpresa = new Empresa();

                unaEmpresa.CodEmpresa = (Int32)resultado["codEmpresa"];

                unaEmpresa.Ruc = (String)resultado["Ruc"];

                unaEmpresa.RazonSocial = (String)resultado["RazonSocial"];

                unaEmpresa.telefono = (String)resultado["telefono"];

                unaEmpresa.email = (String)resultado["email"];

                unaEmpresa.clave = (String)resultado["clave"];

                unaEmpresa.RubroEmpresa = (String)resultado["RubroEmpresa"];

                objColeccionEmpresas.Add(unaEmpresa);
                }
            conexion.Close();
            return objColeccionEmpresas;

        }

       


        public ICollection<Empresa> ListarPorNombreSimilar(string nombre)
        {
            throw new NotImplementedException();
        }

        public Empresa Crear(Empresa entidad)
        {
            return this.CrearEmpresa(entidad);
        }

        public Empresa Obtener(int id)
        {
            return this.ObtenerEmpresa(id);
        }

        public Empresa Modificar(Empresa entidad)
        {
            return this.ModificarEmpresa(entidad);
        }

        public void Eliminar(Empresa entidad)
        {
            this.eliminarEmpresa(entidad.CodEmpresa);
        }
    }
}